<?php
require_once __DIR__ . '/Common.php';
//require_once(ROOT_PATH . '/includes/oss-sdk/Common.php');

use OSS\OssClient;
use OSS\Core\OssException;

$bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
$ossHost = Common::getOssHost();

//var_dump($ossClient);
if (is_null($ossClient)) exit(1);

///**
// * 创建虚拟目录
// *
// * @param OssClient $ossClient OssClient实例
// * @param string $bucket 存储空间名称
// * @param string $dir 存储目录
// * @return null
// */
//function createObjectDir($ossClient, $bucket, $dir)
//{
//  try {
//      $ossClient->createObjectDir($bucket, $dir);
//  } catch (OssException $e) {
//      printf(__FUNCTION__ . ": FAILED\n");
//      printf($e->getMessage() . "\n");
//      return;
//  }
//  //print(__FUNCTION__ . ": OK" . "\n");
//}
//
///**
// * 把本地变量的内容到文件
// *
// * 简单上传,上传指定变量的内存值作为object的内容
// *
// * @param OssClient $ossClient OssClient实例
// * @param string $bucket 存储空间名称
// * @return null
// */
//function putObject($ossClient, $bucket)
//{
//  $object = "oss-php-sdk-test/upload-test-object-name.txt";
//  $content = file_get_contents(__FILE__);
//  $options = array();
//  try {
//      $ossClient->putObject($bucket, $object, $content, $options);
//  } catch (OssException $e) {
//      printf(__FUNCTION__ . ": FAILED\n");
//      printf($e->getMessage() . "\n");
//      return;
//  }
//  print(__FUNCTION__ . ": OK" . "\n");
//}


/**
 * 上传指定的本地文件内容
 *
 * @param OssClient $ossClient OssClient实例
 * @param string $bucket 存储空间名称
 * @return null
 */
function uploadFile($ossClient, $bucket, $object, $filePath, $contentType='')
{
	if ($ossClient)
	{
	    //$object = "oss-php-sdk-test/upload-test-object-name.txt";
	    //$filePath = __FILE__;
	    $options = array();
		if (isset($contentType))
		{
			$options['Content-Type'] = $contentType;
		}
	    try {
	        $ossClient->uploadFile($bucket, $object, $filePath, $options);
	    } catch (OssException $e) {
	      printf(__FUNCTION__ . ": FAILED\n");
	      printf($e->getMessage() . "\n");
	        return;
	    }
	    //print(__FUNCTION__ . ": OK" . "\n");		
	}
}

/**
 * 生成GetObject的签名url,主要用于私有权限下的读访问控制
 *
 * @param $ossClient OssClient OssClient实例
 * @param $bucket string 存储空间名称
 * @return null
 */
function getSignedUrlForGettingObject($ossClient, $bucket, $host, $object, $timeout=60)
{
//  $object = "test/test-signature-test-upload-and-download.txt";
//  $timeout = 3600;
    try {
        $Url = $ossClient->signUrl($bucket, $object, $timeout);
		$signStr = strstr($Url, '?');
		$signedUrl = $host.$object.$signStr;
		
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
	return $signedUrl;
}
/**
 * 列出Bucket内所有目录和文件, 注意如果符合条件的文件数目超过设置的max-keys， 用户需要使用返回的nextMarker作为入参，通过
 * 循环调用ListObjects得到所有的文件，具体操作见下面的 listAllObjects 示例
 *
 * @param OssClient $ossClient OssClient实例
 * @param string $bucket 存储空间名称
 * @return null
 */
//function listObjects($ossClient, $bucket)
//{
//  $prefix = 'oss-php-sdk-test/';
//  $delimiter = '/';
//  $nextMarker = '';
//  $maxkeys = 1000;
//  $options = array(
//      'delimiter' => $delimiter,
//      'prefix' => $prefix,
//      'max-keys' => $maxkeys,
//      'marker' => $nextMarker,
//  );
//  try {
//      $listObjectInfo = $ossClient->listObjects($bucket, $options);
//  } catch (OssException $e) {
//      printf(__FUNCTION__ . ": FAILED\n");
//      printf($e->getMessage() . "\n");
//      return;
//  }
//  print(__FUNCTION__ . ": OK" . "\n");
//  $objectList = $listObjectInfo->getObjectList(); // 文件列表
//  $prefixList = $listObjectInfo->getPrefixList(); // 目录列表
//  if (!empty($objectList)) {
//      print("objectList:\n");
//      foreach ($objectList as $objectInfo) {
//          print($objectInfo->getKey() . "\n");
//      }
//  }
//  if (!empty($prefixList)) {
//      print("prefixList: \n");
//      foreach ($prefixList as $prefixInfo) {
//          print($prefixInfo->getPrefix() . "\n");
//      }
//  }
//}
//
///**
// * 列出Bucket内所有目录和文件， 根据返回的nextMarker循环得到所有Objects
// *
// * @param OssClient $ossClient OssClient实例
// * @param string $bucket 存储空间名称
// * @return null
// */
//function listAllObjects($ossClient, $bucket)
//{
//  //构造dir下的文件和虚拟目录
//  for ($i = 0; $i < 100; $i += 1) {
//      $ossClient->putObject($bucket, "dir/obj" . strval($i), "hi");
//      $ossClient->createObjectDir($bucket, "dir/obj" . strval($i));
//  }
//
//  $prefix = 'dir/';
//  $delimiter = '/';
//  $nextMarker = '';
//  $maxkeys = 30;
//
//  while (true) {
//      $options = array(
//          'delimiter' => $delimiter,
//          'prefix' => $prefix,
//          'max-keys' => $maxkeys,
//          'marker' => $nextMarker,
//      );
//      var_dump($options);
//      try {
//          $listObjectInfo = $ossClient->listObjects($bucket, $options);
//      } catch (OssException $e) {
//          printf(__FUNCTION__ . ": FAILED\n");
//          printf($e->getMessage() . "\n");
//          return;
//      }
//      // 得到nextMarker，从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表
//      $nextMarker = $listObjectInfo->getNextMarker();
//      $listObject = $listObjectInfo->getObjectList();
//      $listPrefix = $listObjectInfo->getPrefixList();
//      var_dump(count($listObject));
//      var_dump(count($listPrefix));
//      if ($nextMarker === '') {
//          break;
//      }
//  }
//}
//
///**
// * 获取object的内容
// *
// * @param OssClient $ossClient OssClient实例
// * @param string $bucket 存储空间名称
// * @return null
// */
//function getObject($ossClient, $bucket)
//{
//  $object = "oss-php-sdk-test/upload-test-object-name.txt";
//  $options = array();
//  try {
//      $content = $ossClient->getObject($bucket, $object, $options);
//  } catch (OssException $e) {
//      printf(__FUNCTION__ . ": FAILED\n");
//      printf($e->getMessage() . "\n");
//      return;
//  }
//  print(__FUNCTION__ . ": OK" . "\n");
//  if (file_get_contents(__FILE__) === $content) {
//      print(__FUNCTION__ . ": FileContent checked OK" . "\n");
//  } else {
//      print(__FUNCTION__ . ": FileContent checked FAILED" . "\n");
//  }
//}
//
///**
// * get_object_to_local_file
// *
// * 获取object
// * 将object下载到指定的文件
// *
// * @param OssClient $ossClient OssClient实例
// * @param string $bucket 存储空间名称
// * @return null
// */
//function getObjectToLocalFile($ossClient, $bucket)
//{
//  $object = "oss-php-sdk-test/upload-test-object-name.txt";
//  $localfile = "upload-test-object-name.txt";
//  $options = array(
//      OssClient::OSS_FILE_DOWNLOAD => $localfile,
//  );
//
//  try {
//      $ossClient->getObject($bucket, $object, $options);
//  } catch (OssException $e) {
//      printf(__FUNCTION__ . ": FAILED\n");
//      printf($e->getMessage() . "\n");
//      return;
//  }
//  print(__FUNCTION__ . ": OK, please check localfile: 'upload-test-object-name.txt'" . "\n");
//  if (file_get_contents($localfile) === file_get_contents(__FILE__)) {
//      print(__FUNCTION__ . ": FileContent checked OK" . "\n");
//  } else {
//      print(__FUNCTION__ . ": FileContent checked FAILED" . "\n");
//  }
//  if (file_exists($localfile)) {
//      unlink($localfile);
//  }
//}
//
///**
// * 拷贝object
// * 当目的object和源object完全相同时，表示修改object的meta信息
// *
// * @param OssClient $ossClient OssClient实例
// * @param string $bucket 存储空间名称
// * @return null
// */
//function copyObject($ossClient, $bucket)
//{
//  $fromBucket = $bucket;
//  $fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
//  $toBucket = $bucket;
//  $toObject = $fromObject . '.copy';
//  $options = array();
//
//  try {
//      $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $options);
//  } catch (OssException $e) {
//      printf(__FUNCTION__ . ": FAILED\n");
//      printf($e->getMessage() . "\n");
//      return;
//  }
//  print(__FUNCTION__ . ": OK" . "\n");
//}
//
///**
// * 修改Object Meta
// * 利用copyObject接口的特性：当目的object和源object完全相同时，表示修改object的meta信息
// *
// * @param OssClient $ossClient OssClient实例
// * @param string $bucket 存储空间名称
// * @return null
// */
//function modifyMetaForObject($ossClient, $bucket)
//{
//  $fromBucket = $bucket;
//  $fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
//  $toBucket = $bucket;
//  $toObject = $fromObject;
//  $copyOptions = array(
//      OssClient::OSS_HEADERS => array(
//          'Cache-Control' => 'max-age=60',
//          'Content-Disposition' => 'attachment; filename="xxxxxx"',
//      ),
//  );
//  try {
//      $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);
//  } catch (OssException $e) {
//      printf(__FUNCTION__ . ": FAILED\n");
//      printf($e->getMessage() . "\n");
//      return;
//  }
//  print(__FUNCTION__ . ": OK" . "\n");
//}
//
///**
// * 获取object meta, 也就是getObjectMeta接口
// *
// * @param OssClient $ossClient OssClient实例
// * @param string $bucket 存储空间名称
// * @return null
// */
//function getObjectMeta($ossClient, $bucket)
//{
//  $object = "oss-php-sdk-test/upload-test-object-name.txt";
//  try {
//      $objectMeta = $ossClient->getObjectMeta($bucket, $object);
//  } catch (OssException $e) {
//      printf(__FUNCTION__ . ": FAILED\n");
//      printf($e->getMessage() . "\n");
//      return;
//  }
//  print(__FUNCTION__ . ": OK" . "\n");
//  if (isset($objectMeta[strtolower('Content-Disposition')]) &&
//      'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]
//  ) {
//      print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");
//  } else {
//      print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");
//  }
//}

/**
 * 删除object
 *
 * @param OssClient $ossClient OssClient实例
 * @param string $bucket 存储空间名称
 * @return null
 */
function deleteObject($ossClient, $bucket, $object)
{
    //$object = "oss-php-sdk-test/upload-test-object-name.txt";
    try {
        $ossClient->deleteObject($bucket, $object);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
//  print(__FUNCTION__ . ": OK" . "\n");
}


/**
 * 批量删除object
 *
 * @param OssClient $ossClient OssClient实例
 * @param string $bucket 存储空间名称
 * @return null
 */
function deleteObjects($ossClient, $bucket, $objects)
{
//  $objects = array();
//  $objects[] = "oss-php-sdk-test/upload-test-object-name.txt";
//  $objects[] = "oss-php-sdk-test/upload-test-object-name.txt.copy";
    try {
        $ossClient->deleteObjects($bucket, $objects);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
//  print(__FUNCTION__ . ": OK" . "\n");
}

/**
 * 判断object是否存在
 *
 * @param OssClient $ossClient OssClient实例
 * @param string $bucket 存储空间名称
 * @return null
 */
//function doesObjectExist($ossClient, $bucket)
//{
//  $object = "oss-php-sdk-test/upload-test-object-name.txt";
//  try {
//      $exist = $ossClient->doesObjectExist($bucket, $object);
//  } catch (OssException $e) {
//      printf(__FUNCTION__ . ": FAILED\n");
//      printf($e->getMessage() . "\n");
//      return;
//  }
//  print(__FUNCTION__ . ": OK" . "\n");
//  var_dump($exist);
//}

